/**
* Copyright (C) 2013 Kurt Raschke <kurt@kurtraschke.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onebusaway.transit_data_federation_webapp.controllers;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.geom.Polygon;
import org.onebusaway.geospatial.model.CoordinateBounds;
import org.onebusaway.transit_data_federation.services.AgencyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/bounding-box.action")
public class BoundingBoxController {
@Autowired
private AgencyService _agencyService;
@RequestMapping()
public ModelAndView index() {
GeometryFactory gf = new GeometryFactory();
List<Polygon> polygons = new ArrayList<Polygon>();
Map<String, CoordinateBounds> agencies = _agencyService.getAgencyIdsAndCoverageAreas();
for (CoordinateBounds cb: agencies.values()) {
Envelope e = new Envelope(cb.getMinLon(), cb.getMaxLon(), cb.getMinLat(), cb.getMaxLat());
Polygon p = (Polygon) gf.toGeometry(e);
polygons.add(p);
}
MultiPolygon mp = gf.createMultiPolygon(polygons.toArray(new Polygon[0]));
Geometry hull = mp.convexHull();
Envelope env = hull.getEnvelopeInternal();
ModelAndView mv = new ModelAndView("bounding-box.jspx");
mv.addObject("minY", env.getMinY());
mv.addObject("minX", env.getMinX());
mv.addObject("maxY", env.getMaxY());
mv.addObject("maxX", env.getMaxX());
mv.addObject("hullWKT", hull.toText());
return mv;
}
}